import { IPSDataEntity } from '../dataentity/ipsdata-entity';
import { IPSDEField } from '../dataentity/defield/ipsdefield';
import { IPSDEDataSet } from '../dataentity/ds/ipsdedata-set';
import { IPSSysSFPlugin } from '../res/ipssys-sfplugin';
import { IPSSystemModule } from '../system/ipssystem-module';
import { IPSModelObject } from '../ipsmodel-object';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSSysMsgTarget
 */
export interface IPSSysMsgTarget extends IPSModelObject {
  /**
   * 消息目标标记
   * @type {string}
   */
  msgTargetTag: string;

  /**
   * 消息目标标记2
   * @type {string}
   */
  msgTargetTag2: string;

  /**
   * 消息目标类型
   * @description 值模式 [系统消息通知目标类型] {RUNTIME：Runtime、 DE：实体数据集、 USER：用户自定义、 USER2：用户自定义2 }
   * @type {( string | 'RUNTIME' | 'DE' | 'USER' | 'USER2')}
   */
  msgTargetType: string | 'RUNTIME' | 'DE' | 'USER' | 'USER2';

  /**
   * 目标数据集
   *
   * @type {IPSDEDataSet}
   */
  getPSDEDataSet(): IPSDEDataSet | null;

  /**
   * 目标数据集
   *
   * @type {IPSDEDataSet}
   */
  get psDEDataSet(): IPSDEDataSet | null;

  /**
   * 目标数据集（必须存在）
   *
   * @type {IPSDEDataSet}
   */
  getPSDEDataSetMust(): IPSDEDataSet;

  /**
   * 实体对象
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntity(): IPSDataEntity | null;

  /**
   * 实体对象
   *
   * @type {IPSDataEntity}
   */
  get psDataEntity(): IPSDataEntity | null;

  /**
   * 实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntityMust(): IPSDataEntity;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  get psSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块（必须存在）
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModuleMust(): IPSSystemModule;

  /**
   * 目标标识值存储属性
   *
   * @type {IPSDEField}
   */
  getTargetPSDEField(): IPSDEField | null;

  /**
   * 目标标识值存储属性
   *
   * @type {IPSDEField}
   */
  get targetPSDEField(): IPSDEField | null;

  /**
   * 目标标识值存储属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getTargetPSDEFieldMust(): IPSDEField;

  /**
   * 目标类型值存储属性
   *
   * @type {IPSDEField}
   */
  getTargetTypePSDEField(): IPSDEField | null;

  /**
   * 目标类型值存储属性
   *
   * @type {IPSDEField}
   */
  get targetTypePSDEField(): IPSDEField | null;

  /**
   * 目标类型值存储属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getTargetTypePSDEFieldMust(): IPSDEField;
}
